// backend/controllers/menuController.js
const db = require('../config/db');

// Get all menu items
exports.getAllMenuItems = async (req, res) => {
    try {
        // 将 MenuItems 修改为 menu_items
        const [rows] = await db.query('SELECT * FROM menu_items ORDER BY category, item_name');
        res.json(rows);
    } catch (err) {
        console.error('获取菜单项列表错误:', err);
        res.status(500).json({ error: '获取菜单项列表失败', details: err.message });
    }
};

// Add a new menu item
exports.addMenuItem = async (req, res) => {
    try {
        const { item_name, price, category } = req.body;

        // 检查菜单项名称是否已存在 (将 MenuItems 修改为 menu_items)
        const [existingItem] = await db.query(
            'SELECT * FROM menu_items WHERE item_name = ?',
            [item_name]
        );

        if (existingItem.length > 0) {
            return res.status(400).json({
                error: '菜单项名称已存在',
                message: `菜单项 ${item_name} 已存在，请使用其他名称`
            });
        }

        // 插入新菜单项 (将 MenuItems 修改为 menu_items)
        const [result] = await db.query(
            'INSERT INTO menu_items (item_name, price, category) VALUES (?, ?, ?)',
            [item_name, price, category]
        );

        res.status(201).json({
            message: '菜单项添加成功',
            menuItemId: result.insertId
        });
    } catch (err) {
        console.error('添加菜单项错误:', err);
        res.status(500).json({ error: '添加菜单项失败', details: err.message });
    }
};

// Update a menu item
exports.updateMenuItem = async (req, res) => {
    try {
        const { id } = req.params; // item_id
        const { item_name, price, category } = req.body;

        // 检查新的菜单项名称是否与其它现有菜单项冲突 (排除当前编辑的菜单项)
        const [existingItemWithSameName] = await db.query(
            'SELECT * FROM menu_items WHERE item_name = ? AND item_id != ?', // 将 MenuItems 修改为 menu_items
            [item_name, id]
        );

        if (existingItemWithSameName.length > 0) {
            return res.status(400).json({
                error: '菜单项名称冲突',
                message: `菜单项 ${item_name} 已被其他菜单项使用，请更改。`
            });
        }

        // 更新菜单项 (将 MenuItems 修改为 menu_items)
        const query = 'UPDATE menu_items SET item_name = ?, price = ?, category = ? WHERE item_id = ?';
        const [result] = await db.query(query, [item_name, price, category, id]);

        if (result.affectedRows === 0) {
            return res.status(404).json({ error: '菜单项未找到或数据无变化，无需更新。' });
        }
        res.status(200).json({ message: '菜单项更新成功。' });

    } catch (error) {
        console.error('更新菜单项失败:', error);
        res.status(500).json({ error: '更新菜单项失败', details: error.message });
    }
};

// Delete a menu item
exports.deleteMenuItem = async (req, res) => {
    try {
        const { id } = req.params; // item_id

        // 检查是否有消费记录关联此菜单项，如果有则不允许删除
        // 这一步是导致删除失败的根本原因，因为 Consumptions 表通过 item_name 关联 menu_items。
        // 如果需要删除，必须先删除所有引用此菜单项的消费记录。
        const [relatedConsumptions] = await db.query('SELECT COUNT(*) AS count FROM Consumptions WHERE item_name = (SELECT item_name FROM menu_items WHERE item_id = ?)', [id]);
        if (relatedConsumptions[0].count > 0) {
            return res.status(400).json({ error: '无法删除', message: '存在关联的消费记录，请先删除相关消费记录。' });
        }

        // 删除菜单项 (将 MenuItems 修改为 menu_items)
        const [result] = await db.query('DELETE FROM menu_items WHERE item_id = ?', [id]);

        if (result.affectedRows === 0) {
            return res.status(404).json({ error: '菜单项未找到。' });
        }
        res.status(200).json({ message: '菜单项删除成功。' });
    } catch (error) {
        console.error('删除菜单项失败:', error);
        res.status(500).json({ error: '删除菜单项失败', details: error.message });
    }
};

// Bulk import menu items//导入菜单项
exports.bulkImportMenuItems = async (req, res) => {
    try {
        const menuItems = req.body; // Assuming req.body is an array of menu item objects

        if (!Array.isArray(menuItems) || menuItems.length === 0) {
            return res.status(400).json({ error: '无效的数据', message: '导入数据应为非空数组。' });
        }

        // 提取所有要导入的 item_name
        const itemNames = menuItems.map(item => item.item_name);

        // 检查数据库中是否已存在这些 item_name (将 MenuItems 修改为 menu_items)
        const [existingItems] = await db.query(
            `SELECT item_name FROM menu_items WHERE item_name IN (?)`,
            [itemNames]
        );

        const existingNames = existingItems.map(item => item.item_name);
        const duplicates = menuItems.filter(item => existingNames.includes(item.item_name));

        if (duplicates.length > 0) {
            const duplicateNames = duplicates.map(r => r.item_name).join(', ');
            return res.status(400).json({
                error: '存在重复菜单项名称',
                message: `以下菜单项名称已存在: ${duplicateNames}`,
                duplicates
            });
        }

        // 构建批量插入的 values
        const values = menuItems.map(item => [
            item.item_name,
            item.price,
            item.category || null // 允许 category 为空
        ]);

        // 执行批量插入 (将 MenuItems 修改为 menu_items)
        const [result] = await db.query(
            'INSERT INTO menu_items (item_name, price, category) VALUES ?',
            [values]
        );

        res.status(201).json({
            message: `成功导入${result.affectedRows}个菜单项`,
            importedCount: result.affectedRows
        });

    } catch (err) {
        if (err.code === 'ER_DUP_ENTRY') {
            console.error('批量导入菜单项名称冲突:', err);
            res.status(400).json({
                error: '存在重复菜单项名称',
                message: '导入文件中包含已存在的菜单项名称（可能是由于并发或旧数据，请检查）'
            });
        } else {
            console.error('批量导入菜单项错误:', err);
            res.status(500).json({ error: '批量导入菜单项失败', details: err.message });
        }
    }
};
